package com.wei.czz.common.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2023-04-15 10:25:23
 * className: ResultEnum 请求结果枚举类
 * version: 1.0
 * description:
 */
@Getter
@AllArgsConstructor
public enum ResultEnum {

    /*
        成功
     */
    SUCCESS(200, "请求成功"),

    /*
        请求失败
     */
    REQUEST_FAIL(400, "请求失败"),
    ILLEGAL_FAIL(400, "非法请求，请停止！！！"),
    PARAM_FAIL(400, "请求参数错误，请确认"),
    PAGE_FAIL(400, "请求分页参数错误，请确认"),
    BATCH_FAIL(400, "批量处理数据超过系统设定最大值，操作被拒绝"),
    SQL_FAIL(400, "sql注入，请停止"),
    NOT_FOUND(400, "很抱歉，您的访问的数据不存在，请确认"),
    MOBILE_FAIL(400, "手机号格式错误，请确认"),
    EMAIL_FAIL(400, "邮箱号格式错误，请确认"),
    DATA_DUPLICATION(400, "您提交的数据已存在，无法重复添加"),

    AUTH_FAIL(401, "很抱歉，您没有访问权限"),

    NOT_AUTH(403, "很抱歉，请认证后在进行操作"),
    TOKEN_LOSE(403, "很抱歉，请添加访问令牌后在进行操作"),
    TOKEN_FAIL(403, "很抱歉，您的访问令牌值不对，请确认"),

    RISK_USER(40301, "很抱歉，您触发系统风控规则，被限制使用，申诉通过后即可恢复使用"),
    TOKEN_INVALID(40301, "请求携带token令牌无效，请确认"),

    TOKEN_EXPIRE(40302, "请求携带token令牌已过期，请确认"),

    DISABLE_USER(40303, "很抱歉，您已被系统禁止使用，您可以进行申诉操作"),

    SINGLE_LOGIN(40304, "请求用户已经登录，触发单点登录限制"),

    PASSWORD_FAIL(40304, "登录密码错误，请确认后重新输入"),

    NOT_LOGIN(40305, "请登录后再进行操作"),

    /*
        请求要处理的数据与服务器存储的数据冲突，此次请求当作无效请求，并强制用户刷新当前页面数据
     */
    REFRESH(409, "很抱歉，您操作的数据已变更，请重新操作"),

    EMPTY(410, "数据获取结果为空，请确认后重新操作"),

    REJECT(411, "您的请求被系统拒绝，请确认后重新操作"),

    TRY_LOCK_FAIL(421, "很抱歉，您操作的数据正在编辑中，请稍后重试"),

    NOT_SMS_CHANNEL(430, "短信渠道未找到"),
    SMS_PARAM_FAIL(431, "短信参数错误"),
    SMS_TEMPLATE_DISABLE_FAIL(432, "短信配置已停用"),
    NOT_SMS_TEMPLATE(433, "短信模板不存在"),

    /*
        系统异常
     */
    SERVICE_FAIL(500, "系统异常，请稍后重试"),
    LIMIT_FAIL(500, "请求流量过大，请稍后重试"),
    ;

    /**
     * 状态码
     */
    private final Integer code;

    /**
     * 回复消息
     */
    private final String msg;

    /**
     * 获取会进行风控计算的请求结果对象操作
     * @return 请求结果对象列表
     */
    public static List<ResultEnum> getRiskResultList() {
        List<ResultEnum> list = new ArrayList<>();
        list.add(ResultEnum.REQUEST_FAIL);
        list.add(ResultEnum.AUTH_FAIL);
        list.add(ResultEnum.NOT_AUTH);
        list.add(ResultEnum.TOKEN_INVALID);
        list.add(ResultEnum.TOKEN_EXPIRE);
        list.add(ResultEnum.SINGLE_LOGIN);
        // 短信相关
        list.add(ResultEnum.NOT_SMS_CHANNEL);
        list.add(ResultEnum.SMS_PARAM_FAIL);
        list.add(ResultEnum.SMS_TEMPLATE_DISABLE_FAIL);
        list.add(ResultEnum.NOT_SMS_TEMPLATE);
        return list;
    }

    /**
     * 获取服务端异常请求结果对象操作
     * @return 请求结果对象列表
     */
    public static List<ResultEnum> getServiceFailList() {
        List<ResultEnum> list = new ArrayList<>();
        list.add(ResultEnum.SERVICE_FAIL);
        return list;
    }
}
